home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / Visual Cafe Pro v1.0 / TUTORIAL.BIN / TreeView.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-12-16  |  12.2 KB  |  753 lines

  1. package symantec.itools.awt;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.Color;
  5. import java.awt.Component;
  6. import java.awt.Container;
  7. import java.awt.Dimension;
  8. import java.awt.Event;
  9. import java.awt.Font;
  10. import java.awt.FontMetrics;
  11. import java.awt.Graphics;
  12. import java.awt.Image;
  13. import java.awt.LayoutManager;
  14. import java.awt.Panel;
  15. import java.awt.Rectangle;
  16. import java.awt.Scrollbar;
  17. import java.util.Vector;
  18. import symantec.beans.Beans;
  19.  
  20. public class TreeView extends Panel {
  21.    public static final int CHILD = 0;
  22.    public static final int NEXT = 1;
  23.    public static final int LAST = 2;
  24.    private TreeNode rootNode;
  25.    private TreeNode selectedNode;
  26.    private TreeNode topVisibleNode;
  27.    Scrollbar sbV;
  28.    int sbVPosition;
  29.    int sbVWidth;
  30.    long sbVTimer;
  31.    private int count;
  32.    private int viewCount;
  33.    private Color bgHighlightColor;
  34.    private Color fgHighlightColor;
  35.    private int viewHeight;
  36.    private int viewWidth;
  37.    private int viewWidest;
  38.    int cellSize;
  39.    int clickSize;
  40.    int imageInset;
  41.    int textInset;
  42.    int textBaseLine;
  43.    // $FF: renamed from: fm java.awt.FontMetrics
  44.    private FontMetrics field_0;
  45.    long timeMouseDown;
  46.    int doubleClickResolution;
  47.    protected Image im1;
  48.    // $FF: renamed from: g1 java.awt.Graphics
  49.    protected Graphics field_1;
  50.    private String[] treeStructure;
  51.    // $FF: renamed from: e java.util.Vector
  52.    private Vector field_2;
  53.    // $FF: renamed from: v java.util.Vector
  54.    private Vector field_3;
  55.  
  56.    public TreeView() {
  57.       this.sbVWidth = 16;
  58.       this.sbVTimer = -1L;
  59.       this.bgHighlightColor = Color.blue;
  60.       this.fgHighlightColor = Color.white;
  61.       this.viewHeight = 300;
  62.       this.viewWidth = 300;
  63.       this.cellSize = 16;
  64.       this.clickSize = 8;
  65.       this.imageInset = 3;
  66.       this.textInset = 6;
  67.       this.textBaseLine = 3;
  68.       this.doubleClickResolution = 333;
  69.       super.setLayout(new BorderLayout());
  70.       ((Container)this).add("East", this.sbV = new Scrollbar(1));
  71.    }
  72.  
  73.    public TreeView(TreeNode var1) {
  74.       this();
  75.       this.selectedNode = this.rootNode = var1;
  76.       this.count = 1;
  77.    }
  78.  
  79.    public void setBackground(Color var1) {
  80.       super.setBackground(var1);
  81.       ((Component)this).invalidate();
  82.    }
  83.  
  84.    public Color getBackground() {
  85.       return super.getBackground();
  86.    }
  87.  
  88.    public void setForeground(Color var1) {
  89.       super.setForeground(var1);
  90.       ((Component)this).invalidate();
  91.    }
  92.  
  93.    public Color getForeground() {
  94.       return super.getForeground();
  95.    }
  96.  
  97.    public void setFgHilite(Color var1) {
  98.       this.fgHighlightColor = var1;
  99.       ((Component)this).invalidate();
  100.    }
  101.  
  102.    public Color getFgHilite() {
  103.       return this.fgHighlightColor;
  104.    }
  105.  
  106.    public void setBgHilite(Color var1) {
  107.       this.bgHighlightColor = var1;
  108.       ((Component)this).invalidate();
  109.    }
  110.  
  111.    public Color getBgHilite() {
  112.       return this.bgHighlightColor;
  113.    }
  114.  
  115.    public void insert(TreeNode var1, TreeNode var2, int var3) {
  116.       if (var1 != null && var2 != null) {
  117.          if (this.exists(var2)) {
  118.             switch (var3) {
  119.                case 0:
  120.                   this.addChild(var1, var2);
  121.                   return;
  122.                case 1:
  123.                   this.addSibling(var1, var2);
  124.                   return;
  125.                case 2:
  126.                   this.addSibling(var1, var2);
  127.                   return;
  128.                default:
  129.             }
  130.          }
  131.       }
  132.    }
  133.  
  134.    public TreeNode getRootNode() {
  135.       return this.rootNode;
  136.    }
  137.  
  138.    public int getCount() {
  139.       return this.count;
  140.    }
  141.  
  142.    public int getViewCount() {
  143.       return this.viewCount;
  144.    }
  145.  
  146.    boolean viewable(TreeNode var1) {
  147.       for(int var2 = 0; var2 < this.viewCount; ++var2) {
  148.          if (var1 == this.field_3.elementAt(var2)) {
  149.             return true;
  150.          }
  151.       }
  152.  
  153.       return false;
  154.    }
  155.  
  156.    boolean viewable(String var1) {
  157.       if (var1 == null) {
  158.          return false;
  159.       } else {
  160.          for(int var2 = 0; var2 < this.viewCount; ++var2) {
  161.             TreeNode var3 = (TreeNode)this.field_3.elementAt(var2);
  162.             if (var3.text != null && var1.equals(var3.text)) {
  163.                return true;
  164.             }
  165.          }
  166.  
  167.          return false;
  168.       }
  169.    }
  170.  
  171.    public boolean exists(TreeNode var1) {
  172.       this.recount();
  173.  
  174.       for(int var2 = 0; var2 < this.count; ++var2) {
  175.          if (var1 == this.field_2.elementAt(var2)) {
  176.             return true;
  177.          }
  178.       }
  179.  
  180.       return false;
  181.    }
  182.  
  183.    public boolean exists(String var1) {
  184.       this.recount();
  185.       if (var1 == null) {
  186.          return false;
  187.       } else {
  188.          for(int var2 = 0; var2 < this.count; ++var2) {
  189.             TreeNode var3 = (TreeNode)this.field_2.elementAt(var2);
  190.             if (var3.text != null && var1.equals(var3.text)) {
  191.                return true;
  192.             }
  193.          }
  194.  
  195.          return false;
  196.       }
  197.    }
  198.  
  199.    public void append(TreeNode var1) {
  200.       if (this.rootNode == null) {
  201.          this.rootNode = var1;
  202.          this.selectedNode = this.rootNode;
  203.          this.count = 1;
  204.       } else {
  205.          this.addSibling(var1, this.rootNode);
  206.       }
  207.    }
  208.  
  209.    void addChild(TreeNode var1, TreeNode var2) {
  210.       if (var2.child == null) {
  211.          var2.child = var1;
  212.          var1.parent = var2;
  213.          ++this.count;
  214.       } else {
  215.          this.addSibling(var1, var2.child);
  216.       }
  217.  
  218.       ++var2.numberOfChildren;
  219.    }
  220.  
  221.    void addSibling(TreeNode var1, TreeNode var2) {
  222.       TreeNode var3;
  223.       for(var3 = var2; var3.sibling != null; var3 = var3.sibling) {
  224.       }
  225.  
  226.       var3.sibling = var1;
  227.       var1.parent = var3.parent;
  228.       ++this.count;
  229.    }
  230.  
  231.    public TreeNode remove(String var1) {
  232.       this.recount();
  233.  
  234.       for(int var2 = 0; var2 < this.count; ++var2) {
  235.          TreeNode var3 = (TreeNode)this.field_2.elementAt(var2);
  236.          if (var3.text != null && var1.equals(var3.text)) {
  237.             this.remove(var3);
  238.             return var3;
  239.          }
  240.       }
  241.  
  242.       return null;
  243.    }
  244.  
  245.    public void removeSelected() {
  246.       if (this.selectedNode != null) {
  247.          this.remove(this.selectedNode);
  248.       }
  249.  
  250.    }
  251.  
  252.    public void remove(TreeNode var1) {
  253.       if (this.exists(var1)) {
  254.          if (var1 == this.selectedNode) {
  255.             int var2 = this.field_3.indexOf(this.selectedNode);
  256.             if (var2 == -1) {
  257.                var2 = this.field_2.indexOf(this.selectedNode);
  258.             }
  259.  
  260.             if (var2 > this.viewCount - 1) {
  261.                var2 = this.viewCount - 1;
  262.             }
  263.  
  264.             if (var2 > 0) {
  265.                this.changeSelection((TreeNode)this.field_3.elementAt(var2 - 1));
  266.             } else if (this.viewCount > 0) {
  267.                this.changeSelection((TreeNode)this.field_3.elementAt(1));
  268.             }
  269.          }
  270.  
  271.          if (var1.parent != null) {
  272.             if (var1.parent.child == var1) {
  273.                if (var1.sibling != null) {
  274.                   var1.parent.child = var1.sibling;
  275.                } else {
  276.                   var1.parent.child = null;
  277.                   var1.parent.collapse();
  278.                }
  279.             } else {
  280.                TreeNode var3;
  281.                for(var3 = var1.parent.child; var3.sibling != var1; var3 = var3.sibling) {
  282.                }
  283.  
  284.                if (var1.sibling != null) {
  285.                   var3.sibling = var1.sibling;
  286.                } else {
  287.                   var3.sibling = null;
  288.                }
  289.             }
  290.          } else if (var1 == this.rootNode) {
  291.             if (var1.sibling == null) {
  292.                this.rootNode = null;
  293.             } else {
  294.                this.rootNode = var1.sibling;
  295.             }
  296.          } else {
  297.             TreeNode var4;
  298.             for(var4 = this.rootNode; var4.sibling != var1; var4 = var4.sibling) {
  299.             }
  300.  
  301.             if (var1.sibling != null) {
  302.                var4.sibling = var1.sibling;
  303.             } else {
  304.                var4.sibling = null;
  305.             }
  306.          }
  307.  
  308.          this.recount();
  309.       }
  310.    }
  311.  
  312.    public void printTree(TreeNode var1) {
  313.       if (var1 != null) {
  314.          System.out.println(var1.text);
  315.          this.printTree(var1.child);
  316.          this.printTree(var1.sibling);
  317.       }
  318.    }
  319.  
  320.    private void recount() {
  321.       this.count = 0;
  322.       this.field_2 = new Vector();
  323.       if (this.rootNode != null) {
  324.          this.rootNode.depth = 0;
  325.          this.traverse(this.rootNode);
  326.       }
  327.  
  328.    }
  329.  
  330.    private void traverse(TreeNode var1) {
  331.       ++this.count;
  332.       this.field_2.addElement(var1);
  333.       if (var1.child != null) {
  334.          var1.child.depth = var1.depth + 1;
  335.          this.traverse(var1.child);
  336.       }
  337.  
  338.       if (var1.sibling != null) {
  339.          var1.sibling.depth = var1.depth;
  340.          this.traverse(var1.sibling);
  341.       }
  342.  
  343.    }
  344.  
  345.    private void resetVector() {
  346.       this.field_3 = new Vector(this.count);
  347.       this.viewWidest = 30;
  348.       if (this.count < 1) {
  349.          this.viewCount = 0;
  350.       } else {
  351.          this.rootNode.depth = 0;
  352.          this.vectorize(this.rootNode);
  353.          this.viewCount = this.field_3.size();
  354.       }
  355.    }
  356.  
  357.    private void vectorize(TreeNode var1) {
  358.       if (var1 != null) {
  359.          this.field_3.addElement(var1);
  360.          if (var1.isExpanded()) {
  361.             var1.child.depth = var1.depth + 1;
  362.             this.vectorize(var1.child);
  363.          }
  364.  
  365.          if (var1.sibling != null) {
  366.             var1.sibling.depth = var1.depth;
  367.             this.vectorize(var1.sibling);
  368.          }
  369.  
  370.       }
  371.    }
  372.  
  373.    private void debugVector() {
  374.       this.field_3.size();
  375.  
  376.       for(int var1 = 0; var1 < this.count; ++var1) {
  377.          TreeNode var2 = (TreeNode)this.field_3.elementAt(var1);
  378.          System.out.println(var2.text);
  379.       }
  380.  
  381.    }
  382.  
  383.    public boolean handleEvent(Event var1) {
  384.       if (var1.target == this.sbV) {
  385.          if (var1.arg == null) {
  386.             return false;
  387.          }
  388.  
  389.          if (this.sbVPosition != (Integer)var1.arg) {
  390.             this.sbVPosition = (Integer)var1.arg;
  391.             this.redraw();
  392.          }
  393.       }
  394.  
  395.       return super.handleEvent(var1);
  396.    }
  397.  
  398.    public boolean mouseDown(Event var1, int var2, int var3) {
  399.       int var4 = var3 / this.cellSize + this.sbVPosition;
  400.       if (var4 > this.viewCount - 1) {
  401.          return false;
  402.       } else {
  403.          TreeNode var5 = this.selectedNode;
  404.          TreeNode var6 = (TreeNode)this.field_3.elementAt(var4);
  405.          int var7 = var6.getDepth();
  406.          this.changeSelection(var6);
  407.          Rectangle var8 = new Rectangle(this.cellSize * var7 + this.cellSize / 4, (var4 - this.sbVPosition) * this.cellSize + this.clickSize / 2, this.clickSize, this.clickSize);
  408.          if (var8.inside(var2, var3)) {
  409.             var6.toggle();
  410.             this.redraw();
  411.          } else {
  412.             if (var6 == var5 && var1.when - this.timeMouseDown < (long)this.doubleClickResolution) {
  413.                var6.toggle();
  414.                this.redraw();
  415.                this.sendActionEvent(var1);
  416.                return false;
  417.             }
  418.  
  419.             this.timeMouseDown = var1.when;
  420.          }
  421.  
  422.          return true;
  423.       }
  424.    }
  425.  
  426.    public boolean keyDown(Event var1, int var2) {
  427.       int var3 = this.field_3.indexOf(this.selectedNode);
  428.       switch (var2) {
  429.          case 10:
  430.             this.sendActionEvent(var1);
  431.             ((Component)this).requestFocus();
  432.             break;
  433.          case 1006:
  434.             if (this.selectedNode.isExpanded()) {
  435.                this.selectedNode.toggle();
  436.                this.redraw();
  437.                break;
  438.             }
  439.          case 1004:
  440.             if (var3 > 0) {
  441.                --var3;
  442.                this.changeSelection((TreeNode)this.field_3.elementAt(var3));
  443.                ((Component)this).requestFocus();
  444.             }
  445.             break;
  446.          case 1007:
  447.             if (this.selectedNode.isExpandable() && !this.selectedNode.isExpanded()) {
  448.                this.selectedNode.toggle();
  449.                this.redraw();
  450.                break;
  451.             } else if (!this.selectedNode.isExpandable()) {
  452.                break;
  453.             }
  454.          case 1005:
  455.             if (var3 < this.viewCount - 1) {
  456.                ++var3;
  457.                this.changeSelection((TreeNode)this.field_3.elementAt(var3));
  458.                ((Component)this).requestFocus();
  459.             }
  460.       }
  461.  
  462.       return false;
  463.    }
  464.  
  465.    private void sendActionEvent(Event var1) {
  466.       int var2 = var1.id;
  467.       Object var3 = var1.arg;
  468.       var1.id = 1001;
  469.       var1.arg = new String(this.selectedNode.getText());
  470.       ((Component)this).postEvent(var1);
  471.       var1.id = var2;
  472.       var1.arg = var3;
  473.    }
  474.  
  475.    public TreeNode getSelectedNode() {
  476.       return this.selectedNode;
  477.    }
  478.  
  479.    public String getSelectedText() {
  480.       return this.selectedNode == null ? null : this.selectedNode.getText();
  481.    }
  482.  
  483.    private void changeSelection(TreeNode var1) {
  484.       if (var1 != this.selectedNode) {
  485.          TreeNode var2 = this.selectedNode;
  486.          this.selectedNode = var1;
  487.          this.drawNodeText(var2, (this.field_3.indexOf(var2) - this.sbVPosition) * this.cellSize, true);
  488.          this.drawNodeText(var1, (this.field_3.indexOf(var1) - this.sbVPosition) * this.cellSize, true);
  489.          int var3 = this.field_3.indexOf(this.selectedNode);
  490.          if (var3 < this.sbVPosition) {
  491.             --this.sbVPosition;
  492.             this.sbV.setValue(this.sbVPosition);
  493.             this.redraw();
  494.          } else if (var3 >= this.sbVPosition + (this.viewHeight - this.cellSize / 2) / this.cellSize) {
  495.             ++this.sbVPosition;
  496.             this.sbV.setValue(this.sbVPosition);
  497.             this.redraw();
  498.          } else {
  499.             ((Component)this).repaint();
  500.          }
  501.       }
  502.    }
  503.  
  504.    public void update(Graphics var1) {
  505.       this.paint(var1);
  506.    }
  507.  
  508.    public void paint(Graphics var1) {
  509.       Dimension var2 = ((Component)this).size();
  510.       if (var2.width == this.viewWidth && var2.height == this.viewHeight) {
  511.          if (Beans.isDesignTime()) {
  512.             this.resetVector();
  513.             ((Container)this).layout();
  514.             this.drawTree();
  515.          }
  516.       } else {
  517.          this.redraw();
  518.       }
  519.  
  520.       var1.drawImage(this.im1, 0, 0, this);
  521.    }
  522.  
  523.    public void redraw() {
  524.       this.resetVector();
  525.       if (this.viewCount > this.viewHeight / this.cellSize) {
  526.          this.sbV.setValues(this.sbVPosition, this.viewHeight / this.cellSize, 0, this.viewCount - 2);
  527.          this.sbV.setPageIncrement(1);
  528.          this.sbVWidth = 16;
  529.          ((Component)this).getParent().paintAll(((Component)this).getParent().getGraphics());
  530.          this.sbV.show();
  531.          ((Container)this).layout();
  532.       } else {
  533.          this.sbV.hide();
  534.          this.sbVWidth = 0;
  535.          this.sbVPosition = 0;
  536.          ((Container)this).layout();
  537.       }
  538.  
  539.       this.drawTree();
  540.       ((Component)this).repaint();
  541.    }
  542.  
  543.    public void drawTree() {
  544.       Dimension var1 = ((Component)this).size();
  545.       if (var1.width != this.viewWidth || var1.height != this.viewHeight || this.field_1 == null) {
  546.          this.im1 = ((Component)this).createImage(var1.width, var1.height);
  547.          if (this.field_1 != null) {
  548.             this.field_1.dispose();
  549.          }
  550.  
  551.          this.field_1 = this.im1.getGraphics();
  552.          this.viewWidth = var1.width;
  553.          this.viewHeight = var1.height;
  554.       }
  555.  
  556.       Font var2 = ((Component)this).getFont();
  557.       if (var2 == null) {
  558.          var2 = new Font("TimesRoman", 0, 13);
  559.          this.field_1.setFont(var2);
  560.          ((Component)this).setFont(var2);
  561.       }
  562.  
  563.       this.field_0 = this.field_1.getFontMetrics();
  564.       this.field_1.setColor(this.getBackground());
  565.       this.field_1.fillRect(0, 0, this.viewWidth, this.viewHeight);
  566.       int var3 = this.sbVPosition + this.viewHeight / this.cellSize;
  567.       if (var3 > this.viewCount) {
  568.          var3 = this.viewCount;
  569.       }
  570.  
  571.       for(int var4 = this.sbVPosition; var4 < var3; ++var4) {
  572.          TreeNode var5 = (TreeNode)this.field_3.elementAt(var4);
  573.          int var6 = this.cellSize * (var5.depth + 1);
  574.          int var7 = (var4 - this.sbVPosition) * this.cellSize;
  575.          this.field_1.setColor(this.getForeground());
  576.          if (var5.sibling != null) {
  577.             int var8 = this.field_3.indexOf(var5.sibling) - var4;
  578.             if (var8 > var3) {
  579.                var8 = var3;
  580.             }
  581.  
  582.             this.drawDotLine(var6 - this.cellSize / 2, var7 + this.cellSize / 2, var6 - this.cellSize / 2, var7 + this.cellSize / 2 + var8 * this.cellSize);
  583.          }
  584.  
  585.          for(int var11 = 0; var11 < var4; ++var11) {
  586.             TreeNode var9 = (TreeNode)this.field_3.elementAt(var11);
  587.             if (var9.sibling == var5 && var11 < this.sbVPosition) {
  588.                this.drawDotLine(var6 - this.cellSize / 2, 0, var6 - this.cellSize / 2, var7 + this.cellSize / 2);
  589.             }
  590.          }
  591.  
  592.          if (var5.isExpanded()) {
  593.             this.drawDotLine(var6 + this.cellSize / 2, var7 + this.cellSize, var6 + this.cellSize / 2, var7 + this.cellSize + this.cellSize / 2);
  594.          }
  595.  
  596.          this.field_1.setColor(this.getForeground());
  597.          this.drawDotLine(var6 - this.cellSize / 2, var7 + this.cellSize / 2, var6 + this.cellSize / 2, var7 + this.cellSize / 2);
  598.          if (var5.isExpandable()) {
  599.             this.field_1.setColor(this.getBackground());
  600.             this.field_1.fillRect(this.cellSize * var5.depth + this.cellSize / 4, var7 + this.clickSize / 2, this.clickSize, this.clickSize);
  601.             this.field_1.setColor(this.getForeground());
  602.             this.field_1.drawRect(this.cellSize * var5.depth + this.cellSize / 4, var7 + this.clickSize / 2, this.clickSize, this.clickSize);
  603.             this.field_1.drawLine(this.cellSize * var5.depth + this.cellSize / 4 + 2, var7 + this.cellSize / 2, this.cellSize * var5.depth + this.cellSize / 4 + this.clickSize - 2, var7 + this.cellSize / 2);
  604.             if (!var5.isExpanded()) {
  605.                this.field_1.drawLine(this.cellSize * var5.depth + this.cellSize / 2, var7 + this.clickSize / 2 + 2, this.cellSize * var5.depth + this.cellSize / 2, var7 + this.clickSize / 2 + this.clickSize - 2);
  606.             }
  607.          }
  608.  
  609.          Image var12 = var5.getImage();
  610.          if (var12 != null) {
  611.             this.field_1.drawImage(var12, var6 + this.imageInset, var7, this);
  612.          }
  613.  
  614.          if (var5.text != null) {
  615.             this.drawNodeText(var5, var7, var5 == this.selectedNode);
  616.          }
  617.       }
  618.  
  619.       this.field_1.setColor(this.getForeground());
  620.       this.field_1.drawRect(0, 0, this.viewWidth - this.sbVWidth - 1, this.viewHeight - 1);
  621.    }
  622.  
  623.    private void drawNodeText(TreeNode var1, int var2, boolean var3) {
  624.       int var6 = var1.depth;
  625.       int var7 = (var6 + 1) * this.cellSize + this.cellSize + this.textInset;
  626.       Color var4;
  627.       Color var5;
  628.       if (var1 == this.selectedNode) {
  629.          var4 = this.fgHighlightColor;
  630.          var5 = this.bgHighlightColor;
  631.       } else {
  632.          var4 = this.getForeground();
  633.          var5 = this.getBackground();
  634.       }
  635.  
  636.       if (var3) {
  637.          this.field_1.setColor(var5);
  638.          this.field_1.fillRect(var7 - 1, var2 + 1, this.field_0.stringWidth(var1.text) + 4, this.cellSize - 1);
  639.       }
  640.  
  641.       this.field_1.setColor(var4);
  642.       this.field_1.drawString(var1.text, var7, var2 + this.cellSize - this.textBaseLine);
  643.    }
  644.  
  645.    private void drawDotLine(int var1, int var2, int var3, int var4) {
  646.       if (var2 == var4) {
  647.          for(int var6 = var1; var6 < var3; var6 += 2) {
  648.             this.field_1.drawLine(var6, var2, var6, var4);
  649.          }
  650.  
  651.       } else {
  652.          for(int var5 = var2; var5 < var4; var5 += 2) {
  653.             this.field_1.drawLine(var1, var5, var3, var5);
  654.          }
  655.  
  656.       }
  657.    }
  658.  
  659.    public void setTreeStructure(String[] var1) {
  660.       this.rootNode = this.selectedNode = this.topVisibleNode = null;
  661.       this.treeStructure = var1;
  662.  
  663.       try {
  664.          this.parseTreeStructure();
  665.       } catch (InvalidTreeNodeException var3) {
  666.          System.out.println(var3);
  667.       }
  668.    }
  669.  
  670.    public String[] getTreeStructure() {
  671.       return this.treeStructure;
  672.    }
  673.  
  674.    private void parseTreeStructure() throws InvalidTreeNodeException {
  675.       Object var1 = null;
  676.       Object var2 = null;
  677.       String[] var10 = this.treeStructure;
  678.       String var11 = var10[0];
  679.       if (this.findLastPreSpace(var11) > -1) {
  680.          throw new InvalidTreeNodeException();
  681.       } else {
  682.          TreeNode var3 = new TreeNode(var11.trim());
  683.          var3.setDepth(0);
  684.          this.append(var3);
  685.  
  686.          for(int var4 = 1; var4 < var10.length; ++var4) {
  687.             var11 = var10[var4];
  688.             int var6 = this.findLastPreSpace(var11);
  689.             if (var6 == -1) {
  690.                throw new InvalidTreeNodeException();
  691.             }
  692.  
  693.             TreeNode var5 = this.rootNode;
  694.  
  695.             for(int var7 = 0; var7 < var6; ++var7) {
  696.                int var9 = var5.numberOfChildren;
  697.                TreeNode var8 = null;
  698.                if (var9 > 0) {
  699.                   for(var8 = var5.child; var8.sibling != null; var8 = var8.sibling) {
  700.                   }
  701.                }
  702.  
  703.                if (var8 == null) {
  704.                   break;
  705.                }
  706.  
  707.                var5 = var8;
  708.             }
  709.  
  710.             int var14 = var6 - var5.getDepth();
  711.             if (var14 > 1) {
  712.                throw new InvalidTreeNodeException();
  713.             }
  714.  
  715.             var3 = new TreeNode(var11.trim());
  716.             var3.setDepth(var6);
  717.             if (var14 == 1) {
  718.                this.insert(var3, var5, 0);
  719.             } else {
  720.                this.insert(var3, var5, 1);
  721.             }
  722.          }
  723.  
  724.       }
  725.    }
  726.  
  727.    private int findLastPreSpace(String var1) {
  728.       int var2 = var1.length();
  729.       if (var1.charAt(0) != ' ') {
  730.          return -1;
  731.       } else {
  732.          for(int var3 = 1; var3 < var2; ++var3) {
  733.             if (var1.charAt(var3) != ' ') {
  734.                return var3;
  735.             }
  736.          }
  737.  
  738.          return -1;
  739.       }
  740.    }
  741.  
  742.    public synchronized Dimension preferredSize() {
  743.       return new Dimension(175, 125);
  744.    }
  745.  
  746.    public synchronized Dimension minimumSize() {
  747.       return new Dimension(50, 50);
  748.    }
  749.  
  750.    public void setLayout(LayoutManager var1) {
  751.    }
  752. }
  753.